﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Configuracion
{
    public class dbo_Cat_Empresa_Serie
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_Cat_Empresa_Serie(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT

        public Respuesta Insert_Empresa_Serie(
            
	        string Nombre,
	        int? Id_Certificado,
	        int V_Factura,
	        int V_Remision,
	        int V_Pedido,
	        int V_Cotizacion,
	        int V_Devolucion,
	        int V_NotaCredito,
	        int V_NotaCargo,
	        int V_ReciboTraslado,
	        int V_ReciboHonorarios,
	        int V_ReciboArrendamiento,
	        bool IsActive_V_Factura,
	        bool IsActive_V_Remision,
	        bool IsActive_V_Pedido,
	        bool IsActive_V_Cotizacion,
	        bool IsActive_V_Devolucion,
	        bool IsActive_V_NotaCredito,
	        bool IsActive_V_NotaCargo,
	        bool IsActive_V_ReciboTraslado,
	        bool IsActive_V_ReciboHonorarios,
	        bool IsActive_V_ReciboArrendamiento,
	        int C_Factura,
	        int C_Remision,
	        int C_Pedido,
	        int C_Cotizacion,
	        int C_Devolucion,
	        int C_NotaCredito,
	        int C_NotaCargo,
	        int C_ReciboTraslado,
	        int C_ReciboHonorarios,
	        int C_ReciboArrendamiento,
	        bool IsActive_C_Factura,
	        bool IsActive_C_Recepcion,
	        bool IsActive_C_OrdenCompra,
	        bool IsActive_C_Cotizacion,
	        bool IsActive_C_Devolucion,
	        bool IsActive_C_NotaCredito,
	        bool IsActive_C_NotaCargo,
	        bool IsActive_C_ReciboTraslado,
	        bool IsActive_C_ReciboHonorarios,
	        bool IsActive_C_ReciboArrendamiento,
	        DateTime Fecha_Aprobacion_Folios
	    )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Cat_Empresa_Serie
                             (
                                    Id_Serie, 
                                	RFC,
	                                Nombre,
	                                Id_Certificado,
	                                V_Factura,
	                                V_Remision,
	                                V_Pedido,
	                                V_Cotizacion,
	                                V_Devolucion,
	                                V_NotaCredito,
	                                V_NotaCargo,
	                                V_ReciboTraslado,
	                                V_ReciboHonorarios,
	                                V_ReciboArrendamiento,
	                                IsActive_V_Factura,
	                                IsActive_V_Remision,
	                                IsActive_V_Pedido,
	                                IsActive_V_Cotizacion,
	                                IsActive_V_Devolucion,
	                                IsActive_V_NotaCredito,
	                                IsActive_V_NotaCargo,
	                                IsActive_V_ReciboTraslado,
	                                IsActive_V_ReciboHonorarios,
	                                IsActive_V_ReciboArrendamiento,
	                                C_Factura,
	                                C_Remision,
	                                C_Pedido,
	                                C_Cotizacion,
	                                C_Devolucion,
	                                C_NotaCredito,
	                                C_NotaCargo,
	                                C_ReciboTraslado,
	                                C_ReciboHonorarios,
	                                C_ReciboArrendamiento,
	                                IsActive_C_Factura,
	                                IsActive_C_Recepcion,
	                                IsActive_C_OrdenCompra,
	                                IsActive_C_Cotizacion,
	                                IsActive_C_Devolucion,
	                                IsActive_C_NotaCredito,
	                                IsActive_C_NotaCargo,
	                                IsActive_C_ReciboTraslado,
	                                IsActive_C_ReciboHonorarios,
	                                IsActive_C_ReciboArrendamiento,
	                                Fecha_Aprobacion_Folios,
	                                Fecha_Alta,
	                                Usuario_Alta,
	                                Fecha_Mantto,
	                                Usuario_Mantto

                             )
                             VALUES
                             (
                                IIF(DCount('*', 'dbo_Cat_Empresa_Serie') = 0, 1, DMax('Id_Serie', 'dbo_Cat_Empresa_Serie') + 1),
                                '@@RFC',
                                '@@Nombre',
	                            @@Id_Certificado,
	                            @@V_Factura,
	                            @@V_Remision,
	                            @@V_Pedido,
	                            @@V_Cotizacion,
	                            @@V_Devolucion,
	                            @@V_NotaCredito,
	                            @@V_NotaCargo,
	                            @@V_ReciboTraslado,
	                            @@V_ReciboHonorarios,
	                            @@V_ReciboArrendamiento,
	                            @@IsActive_V_Factura,
	                            @@IsActive_V_Remision,
	                            @@IsActive_V_Pedido,
	                            @@IsActive_V_Cotizacion,
	                            @@IsActive_V_Devolucion,
	                            @@IsActive_V_NotaCredito,
	                            @@IsActive_V_NotaCargo,
	                            @@IsActive_V_ReciboTraslado,
	                            @@IsActive_V_ReciboHonorarios,
	                            @@IsActive_V_ReciboArrendamiento,
	                            @@C_Factura,
	                            @@C_Remision,
	                            @@C_Pedido,
	                            @@C_Cotizacion,
	                            @@C_Devolucion,
	                            @@C_NotaCredito,
	                            @@C_NotaCargo,
	                            @@C_ReciboTraslado,
	                            @@C_ReciboHonorarios,
	                            @@C_ReciboArrendamiento,
	                            @@IsActive_C_Factura,
	                            @@IsActive_C_Recepcion,
	                            @@IsActive_C_OrdenCompra,
	                            @@IsActive_C_Cotizacion,
	                            @@IsActive_C_Devolucion,
	                            @@IsActive_C_NotaCredito,
	                            @@IsActive_C_NotaCargo,
	                            @@IsActive_C_ReciboTraslado,
	                            @@IsActive_C_ReciboHonorarios,
	                            @@IsActive_C_ReciboArrendamiento,
	                           '@@Fecha_Aprobacion_Folios',
	                            NOW(),
                                '@@Usuario_Alta',
                                NOW(),
                                '@@Usuario_Mantto'
                             )";

                Query = Query.Replace("@@RFC", this._RFC);
                Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
                
                if (Id_Certificado.HasValue)
                    Query = Query.Replace("@@Id_Certificado", Id_Certificado.ToString());
                else
                    Query = Query.Replace("@@Id_Certificado", "NULL");
                
                Query = Query.Replace("@@V_Factura", V_Factura.ToString());
                Query = Query.Replace("@@V_Remision", V_Remision.ToString());
                Query = Query.Replace("@@V_Pedido", V_Pedido.ToString());
                Query = Query.Replace("@@V_Cotizacion", V_Cotizacion.ToString());
                Query = Query.Replace("@@V_Devolucion", V_Devolucion.ToString());
                Query = Query.Replace("@@V_NotaCredito", V_NotaCredito.ToString());
                Query = Query.Replace("@@V_NotaCargo", V_NotaCargo.ToString());
                Query = Query.Replace("@@V_ReciboTraslado", V_ReciboTraslado.ToString());
                Query = Query.Replace("@@V_ReciboHonorarios", V_ReciboHonorarios.ToString());
                Query = Query.Replace("@@V_ReciboArrendamiento", V_ReciboArrendamiento.ToString());
                Query = Query.Replace("@@IsActive_V_Factura", IsActive_V_Factura.ToString());
                Query = Query.Replace("@@IsActive_V_Remision", IsActive_V_Remision.ToString());
                Query = Query.Replace("@@IsActive_V_Pedido", IsActive_V_Pedido.ToString());
                Query = Query.Replace("@@IsActive_V_Cotizacion", IsActive_V_Cotizacion.ToString());
                Query = Query.Replace("@@IsActive_V_Devolucion", IsActive_V_Devolucion.ToString());
                Query = Query.Replace("@@IsActive_V_NotaCredito", IsActive_V_NotaCredito.ToString());
                Query = Query.Replace("@@IsActive_V_NotaCargo", IsActive_V_NotaCargo.ToString());
                Query = Query.Replace("@@IsActive_V_ReciboTraslado", IsActive_V_ReciboTraslado.ToString());
                Query = Query.Replace("@@IsActive_V_ReciboHonorarios", IsActive_V_ReciboHonorarios.ToString());
                Query = Query.Replace("@@IsActive_V_ReciboArrendamiento", IsActive_V_ReciboArrendamiento.ToString());
                Query = Query.Replace("@@C_Factura", C_Factura.ToString());
                Query = Query.Replace("@@C_Remision", C_Remision.ToString());
                Query = Query.Replace("@@C_Pedido", C_Pedido.ToString());
                Query = Query.Replace("@@C_Cotizacion", C_Cotizacion.ToString());
                Query = Query.Replace("@@C_Devolucion", C_Devolucion.ToString());
                Query = Query.Replace("@@C_NotaCredito", C_NotaCredito.ToString());
                Query = Query.Replace("@@C_NotaCargo", C_NotaCargo.ToString());
                Query = Query.Replace("@@C_ReciboTraslado", C_ReciboTraslado.ToString());
                Query = Query.Replace("@@C_ReciboHonorarios", C_ReciboHonorarios.ToString());
                Query = Query.Replace("@@C_ReciboArrendamiento", C_ReciboArrendamiento.ToString());
                Query = Query.Replace("@@IsActive_C_Factura", IsActive_C_Factura.ToString());
                Query = Query.Replace("@@IsActive_C_Recepcion", IsActive_C_Recepcion.ToString());
                Query = Query.Replace("@@IsActive_C_OrdenCompra", IsActive_C_OrdenCompra.ToString());
                Query = Query.Replace("@@IsActive_C_Cotizacion", IsActive_C_Cotizacion.ToString());
                Query = Query.Replace("@@IsActive_C_Devolucion", IsActive_C_Devolucion.ToString());
                Query = Query.Replace("@@IsActive_C_NotaCredito", IsActive_C_NotaCredito.ToString());
                Query = Query.Replace("@@IsActive_C_NotaCargo", IsActive_C_NotaCargo.ToString());
                Query = Query.Replace("@@IsActive_C_ReciboTraslado", IsActive_C_ReciboTraslado.ToString());
                Query = Query.Replace("@@IsActive_C_ReciboHonorarios", IsActive_C_ReciboHonorarios.ToString());
                Query = Query.Replace("@@IsActive_C_ReciboArrendamiento", IsActive_C_ReciboArrendamiento.ToString());
                Query = Query.Replace("@@Fecha_Aprobacion_Folios", Fecha_Aprobacion_Folios.ToString());
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                return SrvDB.ExecuteQuery_Insert(Query);
                

            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }            
        }

        #endregion

        #region UPDATE

        public Respuesta Update_Empresa_Serie_Alta_FE(
            int Id_Certificado            
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Empresa_Serie SET                                        
	                                
	                                Id_Certificado = @@Id_Certificado
                                WHERE RFC = '@@RFC'
                                ";

                
                Query = Query.Replace("@@Id_Certificado", Id_Certificado.ToString());
                Query = Query.Replace("@@RFC", this._RFC);
                
                return SrvDB.ExecuteQuery_Update(Query);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        public static Respuesta Update_Empresa_Serie_Alta_FE(
            int Id_Serie,
            int V_Factura
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Empresa_Serie SET                                        
	                                
	                                V_Factura = @@V_Factura
                                WHERE Id_Serie = @@Id_Serie
                                ";


                Query = Query.Replace("@@Id_Serie", Id_Serie.ToString());
                Query = Query.Replace("@@V_Factura", V_Factura.ToString());

                return SrvDB.ExecuteQuery_Update(Query);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        public Respuesta Update_Empresa_Serie_Por_Id(
            object Id,
            string Nombre,
            int? Id_Certificado,
            int V_Factura,
            int V_Remision,
            int V_Pedido,
            int V_Cotizacion,
            int V_Devolucion,
            int V_NotaCredito,
            int V_NotaCargo,
            int V_ReciboTraslado,
            int V_ReciboHonorarios,
            int V_ReciboArrendamiento,
            bool IsActive_V_Factura,
            bool IsActive_V_Remision,
            bool IsActive_V_Pedido,
            bool IsActive_V_Cotizacion,
            bool IsActive_V_Devolucion,
            bool IsActive_V_NotaCredito,
            bool IsActive_V_NotaCargo,
            bool IsActive_V_ReciboTraslado,
            bool IsActive_V_ReciboHonorarios,
            bool IsActive_V_ReciboArrendamiento,
            int C_Factura,
            int C_Remision,
            int C_Pedido,
            int C_Cotizacion,
            int C_Devolucion,
            int C_NotaCredito,
            int C_NotaCargo,
            int C_ReciboTraslado,
            int C_ReciboHonorarios,
            int C_ReciboArrendamiento,
            bool IsActive_C_Factura,
            bool IsActive_C_Recepcion,
            bool IsActive_C_OrdenCompra,
            bool IsActive_C_Cotizacion,
            bool IsActive_C_Devolucion,
            bool IsActive_C_NotaCredito,
            bool IsActive_C_NotaCargo,
            bool IsActive_C_ReciboTraslado,
            bool IsActive_C_ReciboHonorarios,
            bool IsActive_C_ReciboArrendamiento,
            DateTime Fecha_Aprobacion_Folios
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Empresa_Serie SET
                                        
	                                Nombre = '@@Nombre',
	                                Id_Certificado = @@Id_Certificado,
	                                V_Factura = @@V_Factura,
	                                V_Remision = @@V_Remision,
	                                V_Pedido = @@V_Pedido,
	                                V_Cotizacion = @@V_Cotizacion,
	                                V_Devolucion = @@V_Devolucion,
	                                V_NotaCredito = @@V_NotaCredito,
	                                V_NotaCargo = @@V_NotaCargo,
	                                V_ReciboTraslado = @@V_ReciboTraslado,
	                                V_ReciboHonorarios = @@V_ReciboHonorarios,
	                                V_ReciboArrendamiento = @@V_ReciboArrendamiento,
	                                IsActive_V_Factura = @@IsActive_V_Factura,
	                                IsActive_V_Remision = @@IsActive_V_Remision,
	                                IsActive_V_Pedido = @@IsActive_V_Pedido,
	                                IsActive_V_Cotizacion = @@IsActive_V_Cotizacion,
	                                IsActive_V_Devolucion = @@IsActive_V_Devolucion,
	                                IsActive_V_NotaCredito = @@IsActive_V_NotaCredito,
	                                IsActive_V_NotaCargo = @@IsActive_V_NotaCargo,
	                                IsActive_V_ReciboTraslado = @@IsActive_V_ReciboTraslado,
	                                IsActive_V_ReciboHonorarios = @@IsActive_V_ReciboHonorarios,
	                                IsActive_V_ReciboArrendamiento = @@IsActive_V_ReciboArrendamiento,
	                                C_Factura = @@C_Factura,
	                                C_Remision = @@C_Remision,
	                                C_Pedido = @@C_Pedido,
	                                C_Cotizacion = @@C_Cotizacion,
	                                C_Devolucion = @@C_Devolucion,
	                                C_NotaCredito = @@C_NotaCredito,
	                                C_NotaCargo = @@C_NotaCargo,
	                                C_ReciboTraslado = @@C_ReciboTraslado,
	                                C_ReciboHonorarios = @@C_ReciboHonorarios,
	                                C_ReciboArrendamiento = @@C_ReciboArrendamiento,
	                                IsActive_C_Factura = @@IsActive_C_Factura,
	                                IsActive_C_Recepcion = @@IsActive_C_Recepcion,
	                                IsActive_C_OrdenCompra = @@IsActive_C_OrdenCompra,
	                                IsActive_C_Cotizacion = @@IsActive_C_Cotizacion,
	                                IsActive_C_Devolucion = @@IsActive_C_Devolucion,
	                                IsActive_C_NotaCredito = @@IsActive_C_NotaCredito,
	                                IsActive_C_NotaCargo = @@IsActive_C_NotaCargo,
	                                IsActive_C_ReciboTraslado = @@IsActive_C_ReciboTraslado,
	                                IsActive_C_ReciboHonorarios = @@IsActive_C_ReciboHonorarios,
	                                IsActive_C_ReciboArrendamiento = @@IsActive_C_ReciboArrendamiento,
	                                Fecha_Aprobacion_Folios = '@@Fecha_Aprobacion_Folios',
                                    Fecha_Mantto = NOW(),
                                    Usuario_Mantto = '@@Usuario_Mantto'

                                 WHERE Id_Serie = @@Id";               

                Query = Query.Replace("@@Nombre", Nombre);

                if(Id_Certificado.HasValue)
                    Query = Query.Replace("@@Id_Certificado", Id_Certificado.ToString());
                else
                    Query = Query.Replace("@@Id_Certificado", "NULL");

                Query = Query.Replace("@@V_Factura", V_Factura.ToString());
                Query = Query.Replace("@@V_Remision", V_Remision.ToString());
                Query = Query.Replace("@@V_Pedido", V_Pedido.ToString());
                Query = Query.Replace("@@V_Cotizacion", V_Cotizacion.ToString());
                Query = Query.Replace("@@V_Devolucion", V_Devolucion.ToString());
                Query = Query.Replace("@@V_NotaCredito", V_NotaCredito.ToString());
                Query = Query.Replace("@@V_NotaCargo", V_NotaCargo.ToString());
                Query = Query.Replace("@@V_ReciboTraslado", V_ReciboTraslado.ToString());
                Query = Query.Replace("@@V_ReciboHonorarios", V_ReciboHonorarios.ToString());
                Query = Query.Replace("@@V_ReciboArrendamiento", V_ReciboArrendamiento.ToString());
                Query = Query.Replace("@@IsActive_V_Factura", IsActive_V_Factura.ToString());
                Query = Query.Replace("@@IsActive_V_Remision", IsActive_V_Remision.ToString());
                Query = Query.Replace("@@IsActive_V_Pedido", IsActive_V_Pedido.ToString());
                Query = Query.Replace("@@IsActive_V_Cotizacion", IsActive_V_Cotizacion.ToString());
                Query = Query.Replace("@@IsActive_V_Devolucion", IsActive_V_Devolucion.ToString());
                Query = Query.Replace("@@IsActive_V_NotaCredito", IsActive_V_NotaCredito.ToString());
                Query = Query.Replace("@@IsActive_V_NotaCargo", IsActive_V_NotaCargo.ToString());
                Query = Query.Replace("@@IsActive_V_ReciboTraslado", IsActive_V_ReciboTraslado.ToString());
                Query = Query.Replace("@@IsActive_V_ReciboHonorarios", IsActive_V_ReciboHonorarios.ToString());
                Query = Query.Replace("@@IsActive_V_ReciboArrendamiento", IsActive_V_ReciboArrendamiento.ToString());
                Query = Query.Replace("@@C_Factura", C_Factura.ToString());
                Query = Query.Replace("@@C_Remision", C_Remision.ToString());
                Query = Query.Replace("@@C_Pedido", C_Pedido.ToString());
                Query = Query.Replace("@@C_Cotizacion", C_Cotizacion.ToString());
                Query = Query.Replace("@@C_Devolucion", C_Devolucion.ToString());
                Query = Query.Replace("@@C_NotaCredito", C_NotaCredito.ToString());
                Query = Query.Replace("@@C_NotaCargo", C_NotaCargo.ToString());
                Query = Query.Replace("@@C_ReciboTraslado", C_ReciboTraslado.ToString());
                Query = Query.Replace("@@C_ReciboHonorarios", C_ReciboHonorarios.ToString());
                Query = Query.Replace("@@C_ReciboArrendamiento", C_ReciboArrendamiento.ToString());
                Query = Query.Replace("@@IsActive_C_Factura", IsActive_C_Factura.ToString());
                Query = Query.Replace("@@IsActive_C_Recepcion", IsActive_C_Recepcion.ToString());
                Query = Query.Replace("@@IsActive_C_OrdenCompra", IsActive_C_OrdenCompra.ToString());
                Query = Query.Replace("@@IsActive_C_Cotizacion", IsActive_C_Cotizacion.ToString());
                Query = Query.Replace("@@IsActive_C_Devolucion", IsActive_C_Devolucion.ToString());
                Query = Query.Replace("@@IsActive_C_NotaCredito", IsActive_C_NotaCredito.ToString());
                Query = Query.Replace("@@IsActive_C_NotaCargo", IsActive_C_NotaCargo.ToString());
                Query = Query.Replace("@@IsActive_C_ReciboTraslado", IsActive_C_ReciboTraslado.ToString());
                Query = Query.Replace("@@IsActive_C_ReciboHonorarios", IsActive_C_ReciboHonorarios.ToString());
                Query = Query.Replace("@@IsActive_C_ReciboArrendamiento", IsActive_C_ReciboArrendamiento.ToString());
                Query = Query.Replace("@@Fecha_Aprobacion_Folios", Fecha_Aprobacion_Folios.ToString());                
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);
                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Update(Query);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region DELETE

        public Respuesta Delete_Empresa_Serie_Por_Id(
            object Id
        )
        {
            try
            {
                string Query = @"DELETE FROM dbo_Cat_Empresa_Serie 
                                    WHERE Id_Serie = @@Id";

                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Delete(Query);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region SELECT

        public DataTable Get_Empresa_Serie_Por_Id(object Id)
        {

            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Certificado

                            FROM (dbo_Cat_Empresa_Serie AS A1
                            
                                LEFT JOIN dbo_Cat_Empresa_Certificado_FE       AS A2 ON A1.Id_Certificado = A2.Id_Certificado_FE)

                            WHERE A1.Id_Serie = @@Id";

            Query = Query.Replace("@@Id", ((Int32)Id).ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Empresa_Serie_Por_Nombre(string Nombre)
        {

            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Certificado

                            FROM (dbo_Cat_Empresa_Serie AS A1
                            
                                LEFT JOIN dbo_Cat_Empresa_Certificado_FE       AS A2 ON A1.Id_Certificado = A2.Id_Certificado_FE)

                            WHERE A1.Nombre = '@@Nombre' AND A1.RFC = '@@RFC'";
            Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Empresa_Seriees()
        {
            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Certificado

                            FROM (dbo_Cat_Empresa_Serie AS A1
                            
                                LEFT JOIN dbo_Cat_Empresa_Certificado_FE       AS A2 ON A1.Id_Certificado = A2.Id_Certificado_FE)

                            WHERE A1.RFC = '@@RFC'";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion
    }
}
